package me.ezitku.base.extensions.Notification

//Intent mainIntent = new Intent(this, MainActivity.class);
//PendingIntent mainPendingIntent = PendingIntent.getActivity(this, 0, mainIntent, PendingIntent.FLAG_UPDATE_CURRENT);

//获取一个用于启动 Activity 的 PendingIntent 对象
//public static PendingIntent getActivity(Context context, int requestCode, Intent intent, int flags);

//获取一个用于启动 Service 的 PendingIntent 对象
//public static PendingIntent getService(Context context, int requestCode, Intent intent, int flags);

//获取一个用于向 BroadcastReceiver 广播的 PendingIntent 对象
//public static PendingIntent getBroadcast(Context context, int requestCode, Intent intent, int flags)

//PendingIntent 具有以下几种 flag：

//FLAG_CANCEL_CURRENT:如果当前系统中已经存在一个相同的 PendingIntent 对象，那么就将先将已有的 PendingIntent 取消，然后重新生成一个 PendingIntent 对象。

//FLAG_NO_CREATE:如果当前系统中不存在相同的 PendingIntent 对象，系统将不会创建该 PendingIntent 对象而是直接返回 null 。

//FLAG_ONE_SHOT:该 PendingIntent 只作用一次。

//FLAG_UPDATE_CURRENT:如果系统中已存在该 PendingIntent 对象，那么系统将保留该 PendingIntent 对象，但是会使用新的 Intent 来更新之前 PendingIntent 中的 Intent 对象数据，例如更新 Intent 中的 Extras 。


//除了以上几种设置 Notification 默认通知效果，还可以通过以下几种 FLAG 设置通知效果。
//设置系统默认提醒效果，一旦设置默认提醒效果，则自定义的提醒效果会全部失效。具体可看源码
//添加默认震动效果,需要申请震动权限
//<uses-permission android:name="android.permission.VIBRATE" />
//Notification.DEFAULT_VIBRATE

//添加系统默认声音效果，设置此值后，调用setSound()设置自定义声音无效
//Notification.DEFAULT_SOUND

//添加默认呼吸灯效果，使用时须与 Notification.FLAG_SHOW_LIGHTS 结合使用，否则无效
//Notification.DEFAULT_LIGHTS

//添加上述三种默认提醒效果
//Notification.DEFAULT_ALL


//提醒效果常用 Flag
//三色灯提醒，在使用三色灯提醒时候必须加该标志符
//Notification.FLAG_SHOW_LIGHTS

//发起正在运行事件（活动中）
//Notification.FLAG_ONGOING_EVENT

//让声音、振动无限循环，直到用户响应 （取消或者打开）
//Notification.FLAG_INSISTENT

//发起Notification后，铃声和震动均只执行一次
//Notification.FLAG_ONLY_ALERT_ONCE

//用户单击通知后自动消失
//Notification.FLAG_AUTO_CANCEL

//只有调用NotificationManager.cancel()时才会清除
//Notification.FLAG_NO_CLEAR

//表示正在运行的服务
//Notification.FLAG_FOREGROUND_SERVICE


//==================== Notification 通知效果的设置方式及注意事项全部在代码中，核心代码如下：
/**
 * 最普通的通知效果
 */
//private void showNotifyOnlyText() {
//    NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
//            .setSmallIcon(R.mipmap.ic_launcher)
//            .setLargeIcon(mLargeIcon)
//            .setContentTitle("我是只有文字效果的通知")
//            .setContentText("我没有铃声、震动、呼吸灯,但我就是一个通知");
//    mManager.notify(1, builder.build());
//}
//
///**
// * 展示有自定义铃声效果的通知
// * 补充:使用系统自带的铃声效果:Uri.withAppendedPath(Audio.Media.INTERNAL_CONTENT_URI, "6");
// */
//private void showNotifyWithRing() {
//    NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
//            .setSmallIcon(R.mipmap.ic_launcher)
//            .setContentTitle("我是伴有铃声效果的通知")
//            .setContentText("美妙么?安静听~")
//            //调用系统默认响铃,设置此属性后setSound()会无效
//            //.setDefaults(Notification.DEFAULT_SOUND)
//            //调用系统多媒体裤内的铃声
//            //.setSound(Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI,"2"));
//            //调用自己提供的铃声，位于 /res/values/raw 目录下
//            .setSound(Uri.parse("android.resource://com.littlejie.notification/" + R.raw.sound));
//    //另一种设置铃声的方法
//    //Notification notify = builder.build();
//    //调用系统默认铃声
//    //notify.defaults = Notification.DEFAULT_SOUND;
//    //调用自己提供的铃声
//    //notify.sound = Uri.parse("android.resource://com.littlejie.notification/"+R.raw.sound);
//    //调用系统自带的铃声
//    //notify.sound = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI,"2");
//    //mManager.notify(2,notify);
//    mManager.notify(2, builder.build());
//}
//
///**
// * 展示有震动效果的通知,需要在AndroidManifest.xml中申请震动权限
// * <uses-permission android:name="android.permission.VIBRATE" />
// * 补充:测试震动的时候,手机的模式一定要调成铃声+震动模式,否则你是感受不到震动的
// */
//private void showNotifyWithVibrate() {
//    //震动也有两种设置方法,与设置铃声一样,在此不再赘述
//    long[] vibrate = new long[]{0, 500, 1000, 1500};
//    NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
//            .setSmallIcon(R.mipmap.ic_launcher)
//            .setContentTitle("我是伴有震动效果的通知")
//            .setContentText("颤抖吧,凡人~")
//            //使用系统默认的震动参数,会与自定义的冲突
//            //.setDefaults(Notification.DEFAULT_VIBRATE)
//            //自定义震动效果
//            .setVibrate(vibrate);
//    //另一种设置震动的方法
//    //Notification notify = builder.build();
//    //调用系统默认震动
//    //notify.defaults = Notification.DEFAULT_VIBRATE;
//    //调用自己设置的震动
//    //notify.vibrate = vibrate;
//    //mManager.notify(3,notify);
//    mManager.notify(3, builder.build());
//}
//
///**
// * 显示带有呼吸灯效果的通知,但是不知道为什么,自己这里测试没成功
// */
//private void showNotifyWithLights() {
//    final NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
//            .setSmallIcon(R.mipmap.ic_launcher)
//            .setContentTitle("我是带有呼吸灯效果的通知")
//            .setContentText("一闪一闪亮晶晶~")
//            //ledARGB 表示灯光颜色、 ledOnMS 亮持续时间、ledOffMS 暗的时间
//            .setLights(0xFF0000, 3000, 3000);
//    Notification notify = builder.build();
//    //只有在设置了标志符Flags为Notification.FLAG_SHOW_LIGHTS的时候，才支持呼吸灯提醒。
//    notify.flags = Notification.FLAG_SHOW_LIGHTS;
//    //设置lights参数的另一种方式
//    //notify.ledARGB = 0xFF0000;
//    //notify.ledOnMS = 500;
//    //notify.ledOffMS = 5000;
//    //使用handler延迟发送通知,因为连接usb时,呼吸灯一直会亮着
//    Handler handler = new Handler();
//    handler.postDelayed(new Runnable() {
//        @Override
//        public void run() {
//            mManager.notify(4, builder.build());
//        }
//    }, 10000);
//}
//
///**
// * 显示带有默认铃声、震动、呼吸灯效果的通知
// * 如需实现自定义效果,请参考前面三个例子
// */
//private void showNotifyWithMixed() {
//    NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
//            .setSmallIcon(R.mipmap.ic_launcher)
//            .setContentTitle("我是有铃声+震动+呼吸灯效果的通知")
//            .setContentText("我是最棒的~")
//            //等价于setDefaults(Notification.DEFAULT_SOUND | Notification.DEFAULT_LIGHTS | Notification.DEFAULT_VIBRATE);
//            .setDefaults(Notification.DEFAULT_ALL);
//    mManager.notify(5, builder.build());
//}
//
///**
// * 通知无限循环,直到用户取消或者打开通知栏(其实触摸就可以了),效果与FLAG_ONLY_ALERT_ONCE相反
// * 注:这里没有给Notification设置PendingIntent,也就是说该通知无法响应,所以只能手动取消
// */
//private void showInsistentNotify() {
//    NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
//            .setSmallIcon(R.mipmap.ic_launcher)
//            .setContentTitle("我是一个死循环,除非你取消或者响应")
//            .setContentText("啦啦啦~")
//            .setDefaults(Notification.DEFAULT_ALL);
//    Notification notify = builder.build();
//    notify.flags |= Notification.FLAG_INSISTENT;
//    mManager.notify(6, notify);
//}
//
///**
// * 通知只执行一次,与默认的效果一样
// */
//private void showAlertOnceNotify() {
//    NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
//            .setSmallIcon(R.mipmap.ic_launcher)
//            .setContentTitle("仔细看,我就执行一遍")
//            .setContentText("好了,已经一遍了~")
//            .setDefaults(Notification.DEFAULT_ALL);
//    Notification notify = builder.build();
//    notify.flags |= Notification.FLAG_ONLY_ALERT_ONCE;
//    mManager.notify(7, notify);
//}
//
///**
// * 清除所有通知
// */
//private void clearNotify() {
//    mManager.cancelAll();
//}